package administracion;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import dao.AdministracionCentralDAO;
import dao.DepositoDAO;
import dao.MovimientoDAO;
import dao.StockProductoDAO;
import dao.SucursalDAO;
import entity.AdministracionCentral;
import entity.DCentral;
import entity.DSucursal;
import entity.Deposito;
import entity.ElaboradoVenta;
import entity.Empleado;
import entity.Lote;
import entity.Movimiento;
import entity.StockProducto;
import entity.Sucursal;


public class MovimientoManager {

	private static MovimientoManager instancia;
	private MovimientoDAO dao = MovimientoDAO.getInstancia();
	
	private MovimientoManager() {
		
	}
	
	public static MovimientoManager getInstancia(){
		if(instancia == null)
			instancia = new MovimientoManager();
		return instancia;
	}

	public void altaMovimiento(Sucursal sucursal, Empleado emp, ElaboradoVenta p, int cantidad) {
		
		
		List<Movimiento> mov = new ArrayList<Movimiento>();
		List<Movimiento> movSucursal = new ArrayList<Movimiento>();
		List<Lote> lotes = DepositoManager.getInstancia().altaLotesPlanProduccion(p, cantidad);
		AdministracionCentral adm = AdministracionCentralDAO.getInstancia().getAdministracionCentral();
		Deposito d = adm.getDeposito();
		Deposito s = sucursal.getDeposito();
		int empty = 0;
		
		Movimiento m = new Movimiento();
		
		m.setArea(sucursal.getCocina().getDeposito());
		m.setDestino(sucursal.getDeposito());
		m.setEstado("baja");
		m.setFecha(new Date());
		m.setLotes(lotes);
		m.setMotivo("planDeProduccion");
		m.setOrigen(d);
		m.setPlanProduccion(true);
		m.setUsuario(adm.getEmpleado());
		
		mov = adm.getDeposito().getMovimientos();
		mov.add(m);
		//Agrego el movimiento de baja a la sucursal de origen
		adm.getDeposito().setMovimientos(mov);
		
		
		//Agrego el movimiento de alta de mercaderia a la sucursal destino
		movSucursal = s.getMovimientos();
		
		Movimiento m1 = new Movimiento();
		
		m1.setArea(sucursal.getCocina().getDeposito());
		m1.setDestino(s);
		m1.setEstado("alta");
		m1.setFecha(new Date());
		m1.setLotes(lotes);
		m1.setMotivo("planDeProduccion");
		m1.setOrigen(d);
		m1.setPlanProduccion(true);
		m1.setUsuario(adm.getEmpleado());
			
		movSucursal.add(m1);
		
		//Ahora lo que deberia hacer es actualizar los stocksProductos de la sucursal
		//con los respectivos lotes que fueron enviados por el movimiento.
		
		List<StockProducto> stock = StockProductoManager.getInstancia().actualizarStockEntrante(s,m1);
		
		//Actualizo el stockProductos del Deposito
		for(StockProducto sp: stock){
			StockProductoDAO.getInstancia().merge(sp);
		}
		
		
		s.setMovimientos(movSucursal);
		
		DepositoDAO.getInstancia().merge(s);
		
		DSucursal depSucu = DepositoDAO.getInstancia().getDepositoSucursal(s.getIdDeposito());
		
		if(depSucu.getProductos().isEmpty()){
			empty = 1;
		}
		
		depSucu.setProductos(stock);
		
		if(empty == 1){
			DepositoDAO.getInstancia().merge(depSucu);
		}
		sucursal.setDeposito(depSucu);
		
		
		//SucursalManager.getInstancia().merge(sucursal);
		//sucursal.getDeposito().setProductos(stock);
		//sucursal.getDeposito().setMovimientos(movSucursal);
		
	}
	
}
